package com.r2coding.article.api;

import com.r2coding.article.entity.LabelEntity;
import com.r2coding.article.service.LabelService;
import com.r2coding.article.vo.req.GetArticlesByIdReqVo;
import com.r2coding.article.vo.req.LabelListReqVo;
import com.r2coding.article.vo.resp.ArticleRespVo;
import com.r2coding.article.vo.resp.LabelListRespVo;
import com.r2coding.common.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author:98k灬
 * @since:2022/04/23 23:17
 **/
@RestController
@RequestMapping("/api/label")
public class ApiLabelController {
    @Autowired
    LabelService labelService;

    /**
     * 查询所有的标签及每个标签下面所发表的博客数量
     *
     * @return 统一响应体
     */
    @GetMapping("/list")
    public Result getLabels() {
        List<LabelListRespVo> labelListRespVos = labelService.labelList();
        return Result.ok(labelListRespVos);
    }

    /**
     * 根据文章id查询所有的标签ids
     *
     * @param id 文章id
     * @return 所有的标签ids
     */
    @GetMapping("/getLabelsByArticleId/{id}")
    public Result getLabelsByArticleId(@PathVariable("id") Integer id) {
        List<LabelEntity> labels = labelService.getLabelsByArticleId(id);
        return Result.ok(labels);
    }

    /**
     * 查询所有的标签信息
     *
     * @return 所有的标签信息
     */
    @GetMapping("/labelList")
    public Result labelList() {
        List<LabelListReqVo> list = labelService.selectAllLabels();
        return Result.ok(list);
    }

    /**
     * 信息
     */
    @GetMapping("/info/{labelId}")
    public Result info(@PathVariable("labelId") Integer labelId){
        LabelListReqVo vo = labelService.getLabelById(labelId);
        return Result.ok(vo);
    }

    /**
     * 根据标签id查询该标签所有的文章信息
     *
     * @param vo 查询信息
     * @return 统一响应体
     */
    @PostMapping("/getArticlesById")
    public Result getArticlesById(@RequestBody GetArticlesByIdReqVo vo) {
        ArticleRespVo resp = labelService.getArticlesById(vo);
        return Result.ok(resp);
    }

    /**
     * 获取所有的标签 且该标签有对应的文章信息
     *
     * @return 统一响应体
     */
    @GetMapping("/getLabel")
    public Result getLabel() {
        List<LabelEntity> labels = labelService.getLabel();
        return Result.ok(labels);
    }

}
